﻿using RayDen.RayEngine.Core.Types;
using RayDen.RayEngine.NextGen.Integrators;
using RayDen.RayEngine.Samplers;

namespace RayDen.RayEngine.NextGen
{
    public interface IPrimarySpaceSampler
    {
        int Width { get; }
        int Height { get; }
        long TotalSamples { get; set; }
        Sample GetSample(Sample prevSample = null);
        float GetLazyValue(Sample sample);
        float NextFloat();
        int GetPass();
        string GetStats();
        void Init(int p1, int p2);
    }


    public interface IEngine
    {
        SurfaceIntegrator SurfaceIntegrator { get; }
        VolumeIntegrator VolumeIntegrator { get; }
        PathSpaceIntegrator PathIntegrator { get; }


        IPrimarySpaceSampler Sampler { get; }
        SurfaceSampler SurfaceSampler { get; }
        LightSampler LightSampler { get; }
        VolumeSampler VolumeSampler { get; }
    }
}
